home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 6
/
QRZ Ham Radio Callsign Database - Volume 6.iso
/
mac
/
files
/
finland
/
ddlcpack.lzh
/
DDLCTEST.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-06
|
6KB
|
294 lines
#include <stdio.h>
typedef unsigned short int16;
typedef unsigned char u_char;
#define PTRTYPE u_char
#define VAL 0xA55A
#define NO_NOS_PARTS
/*#include "ddlc.h"*/
unsigned long BASE = 0xE0000000L;
unsigned int cgetw(addr)
void far *addr;
{
asm les bx,dword ptr addr;
asm mov al,byte ptr es:[bx+0];
asm mov ah,byte ptr es:[bx+0x400];
asm mov ah,byte ptr es:[bx+1];
}
void cputw(addr,val)
void far *addr; unsigned int val;
{
asm les bx,dword ptr addr;
asm mov ax,word ptr val;
asm mov byte ptr es:[bx+0],al;
asm mov al,byte ptr es:[bx+0x400];
asm mov byte ptr es:[bx+1],ah;
}
typedef struct ValCnt { unsigned int val; unsigned int cnt; } ValCnt;
ValCnt valcnt[100];
int valcntC = 0;
void regValCnt (val)
unsigned int val;
{
int i;
for (i=0;i<valcntC;++i) {
if (valcnt[i].val == val) {
valcnt[i].cnt += 1;
return;
}
}
valcnt[valcntC].val = val;
valcnt[valcntC].cnt = 1;
valcntC += 1;
}
void
prtValCnt()
{
int i;
for (i=0;i<valcntC;++i)
printf(" 0x%04X - %4d\n",valcnt[i].val,valcnt[i].cnt);
}
void
tester()
{
register unsigned int count1;
unsigned int count2;
unsigned int maxcount = 10000;
for (count2=maxcount; count2>0; --count2) {
for (count1=maxcount; count1>0; --count1) {
(void) cgetw(BASE);
}
}
exit(0);
}
main(argc,argv)
int argc;
char *argv[];
{
u_char far *buf;
int16 far *bufw;
int16 i, val, failcnt, topcount, fail2cnt;
volatile int16 far *delay = (int16*)0x20000000L;
if (sizeof(char*) != 4) {
printf("Sorry, this has not been compiled with LARGE memory model!\n");
exit(99);
}
if (argc!=1 && argc != 3) {
printf("\
DDLCTEST.EXE: [-s SEG] -- Tests DDLC-card buffer memory and partially chips\n\
Optional argument defines segment where card resides\n");
return 1;
}
#define htoi(x) strtoul(x,NULL,16)
if (strcmp(argv[1],"-t")==0) tester();
if (argc==3)
BASE = ((unsigned long)htoi(argv[2])) << 16;
topcount = 32000;
buf = (u_char far *)(BASE+0x0200L);
bufw = (int16 far *)buf;
failcnt = 0;
for (i=topcount;i>0;--i) {
*buf = 0;
*buf = 0xA5;
*buf = 0x5A;
val = *buf;
if (val != 0x5A)
++failcnt;
}
printf("DDLC SRAM char access (%Fp)\n",buf);
printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
for (i=topcount;i>0;--i) {
*buf = 0;
*buf = 0xA5;
val = *delay;
*buf = 0x5A;
val = *delay;
val = *buf;
if (val != 0x5A)
++failcnt;
}
printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
for (i=topcount;i>0;--i) {
*bufw = 0;
*bufw = 0xA55A;
*bufw = 0x5AA5;
val = *bufw;
if (val != 0x5AA5)
++failcnt;
}
printf("DDLC SRAM word access (%Fp)\n",bufw);
printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
valcntC = 0;
for (i=topcount;i>0;--i) {
*bufw = 0;
*bufw = 0xA55A;
val = *delay;
*bufw = 0x5AA5;
val = *delay;
val = *bufw;
regValCnt(val);
if (val != 0x5AA5)
++failcnt;
}
printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
prtValCnt();
buf = (u_char far *)(BASE+0x02AL);
bufw = (int16 far *)buf;
printf("DDLC register char access (%Fp)\n",buf);
failcnt = 0;
for (i=topcount;i>0;--i) {
*buf = 0;
*buf = 0xA5;
*buf = 0x5A;
val = *buf;
if (val != 0x5A)
++failcnt;
}
printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
for (i=topcount;i>0;--i) {
*buf = 0;
*buf = 0xA5;
val = *delay;
*buf = 0x5A;
val = *delay;
val = *buf;
if (val != 0x5A)
++failcnt;
}
printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
printf("DDLC register word access (%Fp)\n",bufw);
failcnt = 0;
for (i=topcount;i>0;--i) {
*bufw = 0;
*bufw = 0xA55A;
*bufw = 0x5AA5;
val = *bufw;
if (val != 0x5AA5)
++failcnt;
}
printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
for (i=topcount;i>0;--i) {
*bufw = 0;
*bufw = 0xA55A;
val = *delay;
*bufw = 0x5AA5;
val = *delay;
val = *bufw;
if (val != 0x5AA5)
++failcnt;
}
printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt=0; valcntC=0;
for(i=topcount;i>0;--i) {
cputw(buf,0);
cputw(buf,0xA55A);
cputw(buf,0x5AA5);
val = cgetw(buf);
regValCnt(val);
if (val != 0x5AA5)
++failcnt;
}
printf(" cgetw() failure rate: %d/%d\n",failcnt,topcount);
prtValCnt();
buf = (u_char far *)(BASE+0x02AL+0x080L);
bufw = (int16 far *)buf;
printf("DDLC chip 2 register char access (%Fp)\n",buf);
failcnt = 0;
for (i=topcount;i>0;--i) {
*buf = 0;
*buf = 0xA5;
*buf = 0x5A;
val = *buf;
if (val != 0x5A)
++failcnt;
}
printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
for (i=topcount;i>0;--i) {
*buf = 0;
*buf = 0xA5;
val = *delay;
*buf = 0x5A;
val = *delay;
val = *buf;
if (val != 0x5A)
++failcnt;
}
printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
printf("DDLC register word access (%Fp)\n",bufw);
failcnt = 0;
for (i=topcount;i>0;--i) {
*bufw = 0;
*bufw = 0xA55A;
*bufw = 0x5AA5;
val = *bufw;
if (val != 0x5AA5)
++failcnt;
}
printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt = 0;
for (i=topcount;i>0;--i) {
*bufw = 0;
*bufw = 0xA55A;
val = *delay;
*bufw = 0x5AA5;
val = *delay;
val = *bufw;
if (val != 0x5AA5)
++failcnt;
}
printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
failcnt=0; fail2cnt = 0; valcntC = 0;
for(i=topcount;i>0;--i) {
cputw(buf,0);
cputw(buf,0xA55A);
cputw(buf,0x5AA5);
val = cgetw(buf);
if (val != cgetw(buf)) ++fail2cnt;
if (val != 0x5AA5)
++failcnt;
regValCnt(val);
}
printf(" cgetw() failure rate: %d (%d)/%d\n",failcnt,fail2cnt,topcount);
prtValCnt();
return 0;
}